import configparser
from pathlib import Path

from lib.setting.setting import BASE_PATH


class ConfigParser(configparser.RawConfigParser):

    def __init__(self):
        super().__init__()
        self.read(Path(BASE_PATH).joinpath('auto-api-test.ini'), encoding='utf-8')

    def optionxform(self, optionstr: str) -> str:
        """
        重载此方法，数据不转为小写
            默认情况下，这个方法会转换每次 read, get, 或 set 操作的选项名称。
            默认会将名称转换为小写形式。
            这也意味着当一个配置文件被写入时，所有键都将为小写形式。
        :param optionstr:
        :return:
        """
        return optionstr

    def get_mysql_profile(self):
        db_client = self.options('mysql')
        d = {}
        for i in db_client:
            if i.__eq__('port'):
                value = self.getint('mysql', i)
            else:
                value = self.get('mysql', i)
            d[i] = value
        return d

    def get_login_system_username_and_password(self):
        login = self.options('login')
        data = {}
        for key in login:
            value = self.get('login', key)
            data[key] = value
        return data

    def get_base_url(self):
        # 先获取当前环境env
        env = self.get('env', 'env')
        base_url = self.get('env', f'{env}_base_url')
        return base_url
